package com.juzipi.demo.pojo;


import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "student")
public class Student {


    @TableId(type = IdType.ASSIGN_ID)
    //这个注解是传到前端时会把类型转换为字符串类型
    //解决了生成的id过长导致前端传值的时候精度不够查询不到数据的问题
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    @NotBlank
    private String name;
    @NotBlank
    private Integer age;
    @NotBlank
    private String email;
    @NotBlank
    private String gender;
    //处理日期格式的吧
    //传到前端的值是2021-03-19T16:00:00.000+00:00 这样的，不好看而且后面的都不需要
    @JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd",timezone="GMT+8")
    @NotBlank
    private Date birthday;
    private String info;
    //自动填充，在 INSERT 的时候
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    //自动填充，在 添加和修改 的时候
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    //得到删除时间
//    @TableField(fill = FieldFill.UPDATE)
    //初始值为null
    private Date deleteTime;
    //乐观锁注解
    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;
    //逻辑删除注解
    @TableLogic
    @TableField(fill = FieldFill.INSERT)
    private Integer deleted;

}
